package cn.bearspark.idgenerator.provider.service.bo;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.ToString;

/**
 * id 生成器的业务对象的抽象父类
 *
 * @author f
 */
@Getter
@ToString
@AllArgsConstructor
public abstract class IdGeneratorBO {

    /**
     * id 生成器的业务码
     */
    private final int code;

    /**
     * 当前 id 段的 id 数量
     */
    private final long step;

    /**
     * 生成一个 id
     *
     * @return 一个 id
     */
    public abstract Long generateId();

    /**
     * 根据传入的 id 判断 id 生成器的当前 id 段是否被用尽了
     *
     * @param currId 当前获取的 id
     * @return 当前 id 段是否被用尽
     */
    public abstract boolean isExhausted(Long currId);

    /**
     * 获取当前 id 段中已使用的 id 数量
     *
     * @return 当前 id 段中已使用的 id 数量
     */
    public abstract long fetchUsedNum();

}
